import json
from pydantic.v1 import BaseModel


def show_json(data):
    """
    用于展示json数据，支持字符串、字典、列表和Pydantic模型对象

    参数:
        data: 要展示的数据，可以是JSON字符串、字典、列表或继承自BaseModel的Pydantic模型对象

    返回值:
        无返回值，直接打印格式化后的JSON数据
    """
    if isinstance(data, str):
        obj = json.loads(data)
        print(json.dumps(obj, indent=4, ensure_ascii=False))
    elif isinstance(data, dict) or isinstance(data, list):
        print(json.dumps(data, indent=4, ensure_ascii=False))
    elif issubclass(type(data), BaseModel):
        print(json.dumps(data.dict(), indent=4, ensure_ascii=False))


def show_list_obj(data):
    """
    用于展示一组对象，遍历列表中的每个元素并以JSON格式展示

    参数:
        data: 要展示的对象列表

    返回值:
        无返回值，直接打印列表中每个元素的JSON格式数据

    异常:
        ValueError: 当输入不是列表类型时抛出异常
    """
    if isinstance(data, list):
        for item in data:
            show_json(item)
    else:
        raise ValueError("Input is not a list")


# 创建SimpleDirectoryReader对象，用于读取指定目录下的文件
# 配置读取参数：目标目录为./data，不递归遍历子目录，只读取PDF文件
from llama_index.core import SimpleDirectoryReader

import os
from llama_cloud_services import LlamaParse
from llama_index.core import SimpleDirectoryReader

# set up parser
parser = LlamaParse(
    result_type="markdown",  # "markdown" and "text" are available
    api_key=os.getenv("LLAMA_CLOUD_API_KEY")
)
file_extractor = {".pdf": parser}

# 加载目录中的文档数据
documents = SimpleDirectoryReader(input_dir="./data", required_exts=[".pdf"], file_extractor=file_extractor).load_data()
print(documents[0].text)

# 打印第一个文档的文本内容
print(documents[0].text)

# 以JSON格式展示第一个文档的元数据信息
show_json(documents[0].json())
